const { createTaggedLogger } = require('./logger');
const path = require('path');

// 创建带标签的日志记录器
const logger = createTaggedLogger('DEV-SERVER');

async function startDevServer() {
  try {
    logger.info('开始启动开发服务器...');
    logger.debug('环境检查中...');
    
    // 模拟环境检查
    await checkEnvironment();
    
    logger.info('正在加载配置文件');
    const config = await loadConfig();
    logger.debug('配置加载完成', { config: { port: config.port, mode: config.mode } });
    
    logger.info(`启动开发服务器，监听端口: ${config.port}`);
    
    // 模拟启动服务器
    await startServer(config);
    
    logger.info('开发服务器启动成功！');
    logger.info('项目运行在: http://localhost:' + config.port);
    
  } catch (error) {
    logger.error('开发服务器启动失败', { error: error.message, stack: error.stack });
    logger.critical('无法继续，程序将退出');
    process.exit(1);
  }
}

async function checkEnvironment() {
  logger.debug('检查Node.js版本...');
  const nodeVersion = process.version;
  logger.info(`当前Node.js版本: ${nodeVersion}`);
  
  // 模拟一些检查
  if (process.env.NODE_ENV !== 'development') {
    logger.warn('注意: NODE_ENV未设置为development，可能影响开发体验');
  }
  
  return new Promise(resolve => setTimeout(resolve, 500));
}

async function loadConfig() {
  // 模拟配置加载
  logger.debug('从配置文件读取设置');
  return {
    port: 3000,
    mode: 'development',
    debug: true,
    watch: ['src', 'assets']
  };
}

async function startServer(config) {
  // 模拟服务器启动
  logger.debug('初始化中间件...');
  logger.debug('设置路由...');
  logger.debug('启动文件监听...');
  
  // 模拟一些警告
  logger.warn('文件系统监听已启用，修改文件将自动重新加载');
  
  return new Promise(resolve => setTimeout(resolve, 1000));
}

// 启动开发服务器
startDevServer();